home *** CD-ROM | disk | FTP | other *** search
- /*************************************************************************
- * テンプレート機能
- *************************************************************************/
-
-
- char *_ediTmp = NULL; /* テンプレート管理用ワーク */
-
- int _ediTmpData_open()
- {
- char tmp[256];
-
- if ( _ediTmp == NULL )
- {
- if ( (_ediTmp = AMAC_allocWork(0)) == NULL )
- return (ERR);
- sprintf( tmp,"%s%s", AplGetStartPath(), "editmp.tbl" );
- AMAC_load( _ediTmp, tmp );
- }
- return (NORMAL);
- }
-
- /*************************************************************************
- * テンプレート機能
- *************************************************************************/
-
- int TxdUsr_template( char *txd )
- {
- char word[256], tmp[4];
- int ch, len;
- size_t curLnL, curOfs, lnL;
- char *s;
-
- if ( _ediTmpData_open() )
- return (ERR);
- if ( TxdGet_selFlag(txd) != 0 ) /* 選択中なら処理しない */
- return (0);
-
- /* 現在カーソル位置を保存 */
- curLnL = TxdGet_curPosLnL(txd);
- if ( (curOfs = TxdGet_curPosOfs(txd)) == 0 )
- return (NORMAL);
-
- TXD_cmdJump( txd, TXD_PREVWORD ); /* 1ワード戻る */
- if ( TxdGet_curPosLnL(txd) < curLnL )
- TXD_cmdJump( txd, TXD_CUR_RIGHT );
- if ( (ch = TXD_getch(txd)) < 0 || (isalpha(ch) == 0 && ch != '_') )
- {
- TXD_jumpPos( txd, curLnL, curOfs );
- return (NORMAL);
- }
-
- len = 0;
- while( len < 255 )
- {
- ch = TXD_getch(txd);
- TXD_cmdJump( txd, TXD_CUR_RIGHT );
- if ( isalpha(ch) || ch == '_' )
- {
- word[len++] = ch;
- } else
- break;
- }
- word[len] = '\0';
- TXD_jumpPos( txd, curLnL, curOfs );
- if ( len == 0 )
- return (NORMAL);
-
- if ( (s = AMAC_getName( _ediTmp, word )) == NULL )
- return (NORMAL); /* 登録データなし */
-
- while ( *s )
- {
- ch = (*s) & 0xFF;
- ++s;
- switch ( ch )
- {
- case '\x02': /* 行頭に */
- TXD_cmdJump( txd, TXD_TOPOFLINE );
- break;
- case '\x06': /* 行末に */
- TXD_cmdJump( txd, TXD_LASTOFLINE );
- break;
- case '\x08': /* BS */
- TXD_cmdJump( txd, TXD_BS );
- break;
- case '\n': /* 改行 */
- TXD_cmdJump( txd, TXD_CR );
- break;
- case '\x0B': /* ホーム位置 */
- TXD_jumpPos( txd, curLnL, curOfs );
- break;
- case '\x1C': /* カーソル右 */
- TXD_cmdJump( txd, TXD_CUR_RIGHT );
- break;
- case '\x1D': /* カーソル左 */
- TXD_cmdJump( txd, TXD_CUR_LEFT );
- break;
- case '\x1E': /* カーソル上 */
- TXD_cmdJump( txd, TXD_CUR_UP );
- break;
- case '\x1F': /* カーソル下 */
- TXD_cmdJump( txd, TXD_CUR_DOWN );
- break;
- case '\x7F': /* 1文字削除 */
- TXD_cmdJump( txd, TXD_DEL_CHAR );
- break;
-
- default:
- if ( iskanji(ch) && iskanji2(*s) )
- { /* 全角 */
- tmp[0] = ch;
- tmp[1] = *s; ++s;
- tmp[2] = '\0';
- TXD_setBuf( txd, 0, 2, tmp );
- } else
- {
- tmp[0] = ch;
- tmp[1] = '\0';
- TXD_setBuf( txd, 0, 1, tmp );
- }
- break;
- }
- }
- return (NORMAL);
- }
-